package org.ccay.mail.service;

import java.net.URISyntaxException;

import org.ccay.core.exception.ApplicationException;
import org.ccay.mail.MailVO;
import org.ccay.mail.MeetingMailEwsVO;
import org.ccay.mail.MeetingMailVO;

/**
 * 邮件服务，支持基于模板发送和非模板发送。基于模板和绑定值发送邮件时，模板和绑定值的合并采用FreeMarker实现。
 * 
 * @author chaowangbang
 * @since 2011-11-21
 */
public interface IMailService {	
	/**
	 * 发送邮件<br />
	 * 
	 * <p/> 使用示例如下：
	 * 
	 * <pre>
	 * <code>
	 * @Inject
	 * @Named(&quot;defaultMailService&quot;)
	 * //指定使用的服务名
	 * private IMailService mailService;
	 * 
	 * private void send() {
	 * 	MailVO mail = new MailVO();
	 * 	mail.setTo(&quot;lijiaxiang@ccay.org&quot;);
	 * 	mail.setTemplateName(&quot;newTaskTemplate&quot;); //此处的模板为HtmlArea中定义的，Catalog为MailTemplate，名为newTaskTemplate的模板
	 * 
	 * 	SampleTaskVO task = new SampleTaskVO();
	 * 	task.setTaskName(&quot;一起去马尔代夫吃烧烤吧&quot;);
	 * 	task.setTaskURL(&quot;http://www.maerdaifu.com&quot;);
	 * 	Map&lt;String, Serializable&gt; bindItems = new HashMap&lt;String, Serializable&gt;();
	 * 	bindItems.put(&quot;task&quot;, task); //绑定到模板中的对象，模板中用 ${task.taskURL} 输出task的taskURL属性
	 * 	mailVO.setBindItems(bindItems); //此处设定绑定值
	 * 
	 * 	mailService.send(mail);
	 * }
	 * </code>
	 * </pre>
	 * 
	 * @param newMail
	 *            邮件，使用模板发送时指定templateName，非模板发送指定 subject和content。
	 */
	void sendMail(MailVO newMail) throws ApplicationException;
	
}
